package com.ldzy.webase.service;

import com.ldzy.webase.entity.Comment;
import com.ldzy.webase.entity.Press;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface PressService {
    // 获取咨询列表，可根据(consultId咨询类别，status状态，uid用户编号)进行查询;也可不要参数，默认查询全部
    // 可分页查询
    List<Press> getPressAllByMore(Press press, Integer pageNum, Integer pageSize);

    // 获取24小时内热门的咨询列表，可根据(consultId咨询类别，status状态，uid用户编号)进行查询;也可不要参数，默认查询全部
    // 可分页查询
    List<Press> getPressByInterval24HourHot(Press press,Integer pageNum, Integer pageSize);

    // 获取历史最热门的咨询列表，可根据(consultId咨询类别，status状态，uid用户编号)进行查询;也可不要参数，默认查询全部
    // 可分页查询
    List<Press> getPressByMostHot(Press press,Integer pageNum, Integer pageSize);

    // 获取最新评论时间的咨询，可根据(consultId咨询类别，status状态，uid用户编号)进行查询;也可不要参数，默认查询全部
    // 可分页查询
    List<Press> getPressByNewCommentDate(Press press,Integer pageNum, Integer pageSize);

    // 根据pressId，获取咨询的详情信息
    Press getPressByPressId(Integer pressId, Integer uid);

    // 获取咨询列表的总数，也可根据24小时内的咨询列表获取总数
    int getPressTotalOrBy24Hour(Press press,Boolean is24Hour);

    // 发布咨询/话题 (成功返回1，否则返回0)
    int addPress(Press press);

    // 咨询点赞操作-数据库中有使用联合唯一索引，所以会有重复的点赞会自动排除
    int addPressLike(Integer pressId, Integer uid);

    // 咨询取消点赞操作-数据库中有使用联合唯一索引，所以会有重复的点赞会自动排除
    int pressCancelLike(Integer pressId, Integer uid);

    // 获取咨询评论列表,留言数，评论时间，点赞数，可根据(pressId咨询编号)进行查询;也可不要参数，默认查询全部。
    // 可分页查询 curPage从第几条数据开始(pageNum - 1) * pageSize，pageSize每页显示的数量
    List<Comment> getCommentByPressId(Comment comment, Integer pageNum, Integer pageSize);

    // 发表评论 (成功返回1，否则返回0)
    int addComment(Comment comment);

    // 搜索（全文检索）- 获取总数total
    int getSearchPressTotal( String searchValue);

    // 搜索（全文检索）
    // 全文索引和 like 查询对比，有以下优点：
    // like 只是进行模糊匹配，全文索引却提供了一些语法语义的查询功能，会将要查的字符串进行分词操作，这决定于 Mysql 的词库。
    // 全文索引可以自己设置词语的最小、最大长度，要忽略的词，这些都是可以设置的。
    // 用全文索引去某个列查一个字符串，会返回匹配度，可以理解为匹配的关键字个数，是个浮点数。
    @Select("select *,MATCH(content) AGAINST (#{searchValue}) from t_press where MATCH(content) AGAINST(#{searchValue} IN NATURAL LANGUAGE MODE);")
    List<Press> searchPress(String searchValue, Integer pageNum, Integer pageSize);
}
